package com.ruyuan.seckilling.activity.service;

import com.ruyuan.seckilling.activity.entity.ActivitySkuRef;
import com.ruyuan.seckilling.activity.request.ActivitySkuRefModifyRequest;

import java.util.List;

/**
 * @author zhonghuashishan
 */
public interface ActivitySkuRefService {

    /**
     * 根据id查询
     */
    ActivitySkuRef queryById(Long id);

    /**
     * 根据秒杀活动id查询秒杀商品
     * @param activityId 秒杀活动id
     */
    List<ActivitySkuRef> queryByActivityId(Long activityId);

    /**
     * 根据多个秒杀活动id批量查询秒杀商品
     * @param activityIds 多个秒杀活动id
     */
    List<ActivitySkuRef> queryByActivityIds(List<Long> activityIds);

    /**
     * 根据秒杀活动id和秒杀商品id统计记录数
     * @param activityId 秒杀活动id
     * @param skuId 秒杀商品id
     */
    Integer countByActivityIdAndSkuId(Long activityId, Long skuId);

    /**
     * 根据秒杀活动id、页面是否渲染完成统计记录数
     */
    Integer countByActivityIdAndPageReady(Long activityId, boolean pageReady);

    /**
     * 保存一条秒杀活动和秒杀商品的关联关系
     * @param activitySkuRef 秒杀活动和秒杀商品的关联关系实体类
     */
    void save(ActivitySkuRef activitySkuRef);

    /**
     * 根据id修改商品
     */
    void modify(ActivitySkuRefModifyRequest request);

    void modify(Long activityId, Long skuId, Integer salableStock, Integer lockedStock, Integer saledStock);
    /**
     * 标记商品详情页是否已经渲染完成
     */
    boolean updataPageReady(Long activityId, Long skuId, boolean pageReady);

    /**
     * 根据id删除秒杀活动和秒杀商品的关联关系
     * @param id 秒杀活动和秒杀商品的关联关系id
     */
    void remove(Long id);

    /**
     * 根据多个id批量删除秒杀活动和秒杀商品之间的关联关系
     */
    void batchRemove(List<Long> ids);

}
